}
impl<'a> PackageRegistry<'a> {
- pub fn new<'a>(source_ids: Vec<SourceId>,
- config: &'a mut Config<'a>) -> CargoResult<PackageRegistry<'a>> {
-
- let mut reg = PackageRegistry::empty(config);
- let source_ids = dedup(source_ids);
-
- for id in source_ids.iter() {
- try!(reg.load(id, false));
- }
-
- Ok(reg)
- }
-
- fn empty<'a>(config: &'a mut Config<'a>) -> PackageRegistry<'a> {
+ pub fn new<'a>(config: &'a mut Config<'a>) -> PackageRegistry<'a> {
PackageRegistry {
sources: SourceMap::new(),
overrides: vec!(),
Ok(())
}
+ pub fn add_sources(&mut self, ids: Vec<SourceId>) -> CargoResult<()> {
+ for id in dedup(ids).iter() {
+ try!(self.load(id, false));
+ }
+ Ok(())
+ }
+
pub fn add_overrides(&mut self, ids: Vec<SourceId>) -> CargoResult<()> {
for id in ids.iter() {
try!(self.load(id, true));
let user_configs = try!(config::all_configs(os::getcwd()));
let override_ids = try!(source_ids_from_config(&user_configs,
manifest_path.dir_path()));
- let source_ids = package.get_source_ids();
let (packages, resolve, resolve_with_overrides, sources) = {
let lockfile = manifest_path.dir_path().join("Cargo.lock");
let mut config = try!(Config::new(*shell, update, jobs, target.clone()));
- let mut registry = try!(PackageRegistry::new(source_ids, &mut config));
+ let mut registry = PackageRegistry::new(&mut config);
let resolved = match try!(load_lockfile(&lockfile, source_id)) {
- Some(r) => r,
+ Some(r) => {
+ try!(registry.add_sources(r.iter().map(|p| {
+ p.get_source_id().clone()
+ }).collect()));
+ r
+ }
None => {
+ try!(registry.add_sources(package.get_source_ids()));
try!(resolver::resolve(package.get_package_id(),
package.get_dependencies(),
&mut registry))
let resolve = {
let mut config = try!(Config::new(shell, update, None, None));
- let mut registry =
- try!(PackageRegistry::new(source_ids, &mut config));
-
+ let mut registry = PackageRegistry::new(&mut config);
+ try!(registry.add_sources(source_ids));
try!(resolver::resolve(package.get_package_id(),
package.get_dependencies(),
&mut registry))
-use std::io::File;
-use std::path;
+use std::io::{fs, File};
use support::{ProjectBuilder, ResultTest, project, execs, main_file, paths};
use support::{cargo_dir};
FRESH, git_project.root().display(),
FRESH, p.root().display())));
- // Commit the changes and make sure we trigger a recompile
- File::create(&git_project.root().join("src/bar.rs")).write_str(r#"
- pub fn bar() { println!("hello!"); }
- "#).assert();
+ // Commit the changes and make sure we don't trigger a recompile because the
+ // lockfile says not to change
git_project.process("git").args(["add", "."]).exec_with_output().assert();
git_project.process("git").args(["commit", "-m", "test"]).exec_with_output()
.assert();
+ assert_that(p.process(cargo_dir().join("cargo-build")).arg("-u"),
+ execs().with_stdout(format!("{} git repository `file:{}`\n\
+ {} bar v0.5.0 (file:{}#[..])\n\
+ {} foo v0.5.0 (file:{})\n",
+ UPDATING, git_project.root().display(),
+ FRESH, git_project.root().display(),
+ FRESH, p.root().display())));
+
+ println!("one last time");
+
+ // Remove the lockfile and make sure that we update
+ fs::unlink(&p.root().join("Cargo.lock")).assert();
assert_that(p.process(cargo_dir().join("cargo-build")).arg("-u"),
execs().with_stdout(format!("{} git repository `file:{}`\n\
{} bar v0.5.0 (file:{}#[..])\n\